Programmable integrated circuits are a type of integrated circuit that can be configured by a user to implement custom logic functions. In a typical scenario, a logic designer uses computer-aided design (CAD) tools to design a custom logic circuit. When the design process is complete, the CAD tools generate configuration data. The configuration data is loaded into a programmable integrated circuit to configure the device to perform desired logic functions.
A programmable integrated circuit can be used to communicate with system memory. This type of programmable integrated circuit often includes a memory controller that serves as an interface between the programmable integrated circuit and system memory. The programmable integrated circuit also includes processing modules configured to access system memory by sending memory access requests to the memory controller (e.g., the memory controller includes multiple ports each of which receives memory access requests from a respective module within the programmable integrated circuit).
Conventional memory controllers have fixed attributes. Each port of a conventional memory controller has a predefined port width. The port width of each memory controller port limits the amount of data that can be conveyed between the memory controller and the different processing modules of the programmable integrated circuit. A conventional memory controller has a predefined number of ports. The number of ports limits how many processing modules can interface with system memory. Each port of a conventional memory controller has predefined directions of data flow (i.e., each port allows either uni-directional data transfers or bi-directional data transfers from system memory).